INSTITUTO POLITÉCNICO NACIONAL
UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERÍA EN TECNOLOGÍAS AVANZADAS
Práctica 4: Señales en tiempo discreto
Materia: Análisis de Señales y Sistemas
Profesor: Rafael Martínez Martínez
Integrantes:
Huerta Sánchez Jesus Alejandro.
Navarro Herrera Leon Ricardo.
Santos López Luis Enrique.
GRUPO: 2MV1
Fecha de entrega: 03/04/2020

Objetivos:

Índice

Introducción:

Existen diferentes métodos para ralizar la simulación numérica de una comvolución. En la presente práctica se abordan convoluciones y correlaciones y la definicion de estas últimas esta dada por la convolución de una señal con la inversa de la otra por lo que se escriben ambas como sigue:
Por lo que es necesario resolver la integral y se vuelve necesario entender que significa integrar numéricamente para poder inplementar un algoritmo que resuelva el problema, para esta implementación se debe tener en cuanta que es imposible hacer sululaciones que involucren cantidades infinitas, por lo que, si una señal tiene duración y la otra tuene duración la convolución tendra una duración .
Integrar numericamente es buscar polinomios que "sustituyan" de cierto modo a las funciones y hacer la integral con esos polinomios, esta idea surge de ver el problema como un área bajo una curva que se desea encontrar, sin necesidad de implementar la idea del teorema fundamental del cálculo, las motivaciones para realizar este tipo de integración en lugar de la clásica que hasta ahora implementamos con la antiderivada son dos fundamentalmente.
  1. Existen funciones demasiado complejas que no se pueden describir fácilmente o cuya antiderivada no existe, en estos casos la integración clásica con el teorema fundamental del cálculo es demasiado complicada o no se puede hacer.
  2. Los programas computacionales utilizan este tipo de integración ya que es más práctico realizar este tipo de aproximaciones porque no pueden trabajar con un rango de valores infinito, solo muy grande y necesitan para resolver algunos problemas que se sustituyan expresiones por algunas menos complejas matematicamente hablando.
Los métodos tratados en la presente práctica son los deducidos por las fórmulas de Newton Cotes que dicen que se pueden interpolar polinomios de la teoria de Lagrange para obtener las integrales de una función en un intervalo, los puntos de interpolación se dan según el polinomio por (n+1) donde n es el grado del polinomio.
Las fórmulas de los métodos son según el polinomio son:
1.PNG
donde h es el paso
a el extremo inferior
b el extremo superior
xi son los puntos
n el grado del polinomio
Para explicar un poco mas los ejemplos utilizaremos la función 4.PNG
Y por software sabemos que la integral vale aproximadamente en el intervalo -1 a 1
5.PNG
Método del trapecio (n=1):
Se interpola un polinomio de grado 1 por lo que los puntos son 2:
Y las fórmulas quedan
2.PNG
Sustituyendo nuestro ejemplo en e intervalo -1 a 1 queda
12.PNG
Que es 1.0806 aproximado al valor real + o - el error que esmio de grado 1 por lo que los puntos ta en términos de la segunda derivada, por lo que sería 0 para un polinomio de grado 1
Método de Simpson (n=2):
Se interpola un polinoson 3:
Y las fórmulas quedan
15.PNG
Sustituyendo nuestro ejemplo en e intervalo -1 a 1 queda
1.PNG
Que es 1.6935 aproximado al valor real + o - el error que esta en términos de la cuarta derivada, por lo que sería 0 para un polinomio de grado 3
Método de 3 octavos de Simpson (n=3):
Se interpola un polinomio de grado 3 por lo que los puntos son 4:
Y las fórmulas quedan
13.PNG
Sustituyendo nuestro ejemplo en e intervalo -1 a 1 queda
1.PNG
Que es 1.7609 aproximado al valor real + o - el error que esta en términos de la segunda derivada, por lo que sería 0 para un polinomio de grado 3.
Vemos que mientras más puntos tomamos más se aproxima el valor al real por lo que el método es muy útil para calcular integrales, existen métodos mpás complejos con polinomios de Lengere y con las fórmulas de Newton-cotes pero compuestas es decir, varios polinomios en un intervalo, no solo 1 y cada método es más exacto. El término que aparece en función de xi en las fórmulas se conoce como error.

Desarrollo

A continuación se llevan a cabo los puntos solicitados en la práctica.

Problema 1

Para el PR04 reporte la grafica de la simulación númerica de la convolución y compare con el resultado análitico que obtuvo para el problema 1, esto es, su práctica tendrá que incluir una llamada a la funciónn convconm y posteriormente se tendrá que mostrar (mediante el Publish) la gráfica tanto de las señales involucradas como el resultado de la convolución, y en esta última gráficara su resultado analitico, se tendrá que incluir el resultado analitico.
El PR04 se tienen las siguientes señales
Y el resultado analitico es
Ahora se puede implementar las graficas en matlab
figure
subplot(1,3,1)
syms t
x=piecewise(t<0,0,0<t<1,exp(-t),t>1,0);
fplot(x,[-3 3],'r')
grid on
title('x(t)')
axis([-1 3.6 -2 2]);
subplot(1,3,2)
h=piecewise(t<-1,0,-1<t<1,t,t>1,0);
fplot(h,[-5,3],'r')
grid on
title('h(t)')
axis([-2 3.6 -2 2]);
t1=-1:0.01:0;
t2=0:0.01:1;
t3=1:0.01:2;
subplot(1,3,3)
plot(t1,2*exp(-t1-1)+t1-1);
hold on
plot(t2,t2-exp(-1)*(t2-2)-1);
plot(t3,-exp(-1)*(t3-2));
grid on
title('x(t)*h(t)');
axis([-2 3.6 -2 2]);
El siguiente código es una modificación del código de Lathi (Código del capítulo 2, M2.4 pág 161), ejemplo de convoluciones continuas
function convconm(x,h)
figure(1)
hFig=figure (1) % Se crea una figura para hacer las gráficas
set(hFig, 'Position', [0 0 1000 1000])
filename = 'testAnimated.gif';
ttt=1;
dtau = 0.005; % Base de los rectangulos para realizar la integral
tau = -2:dtau:4; % Intervalo de visualización del resultado
ti = 0; % Indice para el vector de resultados
tvec = -2:.1:3.75; % traslaciones de t, cuantas integrales se calulan
y = NaN*zeros(1, length (tvec)); % Resultados de acuerdo a cuantos t
for t = tvec % Cantidad de traslaciones
ti = ti+1; % Indice para guardar el resultado (indice del tiempo)
xh = x(t-tau).*h(tau); % resultado de la multiplicación
lxh = length(xh); % longitud del resultado
y(ti) = sum(xh.*dtau); % Base por altura, aproximación de la integral
subplot (2,1,1), % gráfica de 2 x 1 (primera)
plot(tau, h(tau), 'r-', tau, x(t-tau), 'g--', t, 0, 'ob'); %graficas
axis ([tau(1) tau(end) -3.0 2.5]); % límites de los ejes
patch([tau(1:end-1); tau(1:end-1); tau(2:end); tau(2:end)],...
[zeros(1,lxh-1);xh(1:end-1);xh(2:end);zeros(1,lxh-1)],...
[.8 .8 .8], 'edgecolor', 'none');
xlabel('\tau'); % Texto del eje X
legend('h(\tau)', 'x(t-\tau)','t','h(\tau)x(t-\tau)')% Caja de Texto
subplot (2, 1, 2) % gráfica de 2 x 1 (segunda)
plot (tvec, y, 'k', tvec (ti), y(ti), 'ok');
%%
t1=-1:0.01:0;
t2=0:0.01:1;
t3=1:0.01:2;
plot(t1,2*exp(-t1-1)+t1-1,':b');
hold on
plot(t2,t2-exp(-1)*(t2-2)-1,':b');
plot(t3,-exp(-1)*(t3-2),':b');
legend('Analitico')% Caja de Texto
hold on
%%
xlabel ('t');
ylabel ('y(t) = \int h(\tau)x(t-\tau) d\tau');
axis ([tau(1) tau(end) -3.0 2.0]); % límites del eje
grid; % malla
drawnow; % efecto de movimiento continuo
frame = getframe(hFig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
% Write to the GIF File
if ttt == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
ttt=ttt+1;
end
end
Si ejecutamos las siguientes instrucciones en el Command Window y el directorio de trabajo es el mismo donde se encuentra la función convconm tendrémos el siguiente resultado
x = @(t) exp(-t).*(t>=0 & t<=1);
h = @(t) t.*(t>=-1 & t<=1 );
convconm(x,h)
testAnimated19.gif
Por lo que el resultado coincide el obtenido por la integración numérica y el que ya teníamos analiticamente.

Problema 2

Para el PR05 reporte la grafica de la simulación númerica de la correalción y compare con el resultado análitico que obtuvo para el problema e), esto es, su práctica tendrá que incluir una llamada a la funciónn convconm y posteriormente se tendrá que mostrar (mediante el Publish) la gráfica tanto de las señales involucradas como el resultado de su correlación, y en esta última graficara su resultado analitico, se tendrá que incluir el resultado analitico.
En el PR05 nos pide hacer la autorrelacion de la siguiente señal
Una manera de abordar este problema es recordando una equivalencia de la correlación
figure
subplot(1,3,1)
syms t
x=piecewise(t<0,0,0<t<3,1,3<t<4,1,t>4,0);
fplot(x,[-5 5],'r')
grid on
title('x(t)')
axis([-5 3.6 -2 2]);
subplot(1,3,2)
h=piecewise(t<-4,0,-4<t<-3,-1,-3<t<0,1,t>0,0);
fplot(h,[-5,5],'r')
grid on
title('h(t)')
axis([-5 5 -2 2]);
t1=-4:0.01:-3;
t2=-3:0.01:-1;
t3=-1:0.01:0;
t4=0:0.01:1;
t5=1:0.01:3;
t6=3:0.01:4
subplot(1,3,3)
plot(t1,-t1-4);
hold on
plot(t2,t2+2);
plot(t3,2);
plot(t4,-3*t4+4);
plot(t5,-t5+2);
plot(t3,-4+t6);
grid on
title('x(t)*h(t)');
axis([-5 5 -2 2]);
Si ejecutamos las siguientes instrucciones en el Command Window y el directorio de trabajo es el mismo donde se encuentra la función convconm tendrémos el siguiente resultado
testAnimated2.gif

Problema 3

La convolución de señales en tiempo discreto da como resultado otra señal en tiempo discreto, la operación se define como:
No es posible obtener el resultado de esta operacion para señales de longitud infinita mediante calculos computacionales, por lo que es necesario acotar nuestra descripción a señales causales de longitud finita, considerando que:
A continuación se muestra el código de la función usada para realizar una simulación de la convolución de las señales (c) y (d) del problema 3.1.1 de Lathi.
function convdisc(x1,x2)
Tam1 = size(x1(1,:));
Tam2 = size(x2(1,:));
T1 = Tam1(2);
T2 = Tam2(2);
T3 = T1+T2-1;
vec1 = zeros(1,T1+2*T2-2);
vec2 = zeros(1,T1+2*T2-2);
Tec2 = -(T2-1):(T1+T2-2);
size(vec2);
size(Tec2);
x3=zeros(2,T3);
x3(1,:)=0:T3-1;
x3(1,:)=x3(1,:)+x1(1,1)+x2(1,1);
vec1(1,T2:T2+T1-1)=x1(2,:);
figure (1)
hFig = figure(1);
set(hFig, 'Position', [0 0 1000 1000])
filename = 'testAnimated.gif';
ttt=1;
for m=0:T1+T2-2
vec2(1,1+m:T2+m)=fliplr(x2(2,:));
x3(2,m+1)=sum(vec1.*vec2);
subplot(4,1,4)
stem(x3(1,:),x3(2,:),'r','LineWidth',3)
axis([Tec2(1),T1+2*T2-2, min(x3(2,:))-1 max(x3(2,:))+1])
ylim('auto')
ylabel('x_3[n]','FontWeight','bold','FontSize',16);
xlabel('n','FontWeight','bold','FontSize',16);
grid on
subplot(4,1,2)
stem(x2(1,:),x2(2,:),'k','LineWidth',3)
ylabel('x_2[m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
grid on
axis([Tec2(1),T1+2*T2-2, min(x2(2,:))-1 max(x2(2,:))+1])
ylim('auto')
subplot(4,1,1)
stem(x1(1,:),x1(2,:),'b','LineWidth',3)
ylabel('x_1[m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
title('CONVOLUCIóN/CORRELACIÓN','FontWeight','bold','FontSize',16);
grid on
axis([Tec2(1),T1+2*T2-2, min(x1(2,:))-1 max(x1(2,:))+1])
ylim('auto')
subplot(4,1,3)
stem(Tec2,vec2(1,:),'g','LineWidth',3)
axis([Tec2(1),T1+2*T2-2,min(vec2)-1, max(vec2)+1 ])
ylim('auto')
ylabel('x_2[n-m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
grid on
drawnow;
pause(0.4)
vec2 = zeros(1,T1+2*T2-2);
frame = getframe(hFig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
% Write to the GIF File
if ttt == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
ttt=ttt+1;
end
end
Si ejecutamos las siguientes instrucciones en el Command Window y el directorio de trabajo es el mismo donde se encuentra la función convdisc obtendrémos el siguente resultado.
n=0:9;
a=[0 0 4 2 0 2 4 0 0 0 ];
b=[0 -9 -6 -3 0 3 6 9 0 0];
convdisc([n;a],[n;b])
gif2.gif
Y observamos como se construye la gráfica según avanza la señal móvil.

Problema 4

La correlación de las señales y puede definirse a partir de la convolución, esto es:
Para usar el código de convolución para obtener la correlación de las señales (c) y (d) del problema 3.1.1 de Lathi, debemos escribir en el Command Window.
n=0:9;
a=[0 0 4 2 0 2 4 0 0 0 ];
b=[0 -9 -6 -3 0 3 6 9 0 0];
m=length(b);
b=b(m:-1:1)
convdisc([n;a],[n;b])
Con lo que obtendremos la siguiente salida.
gif3.gif

Problema 5

Convolución de las señales (c) y (d) del problema 3.1.1 Lathi mediante el uso del comando conv de MATLAB.
A continuación se muestra el código de la función usada para realizar una simulación.
function [nc,c] = convdisc2(a,na,b,nb)
mina = min(na)
minb = min(nb)
summin = abs(mina) + abs(minb)
c = conv(a,b)
%normac = length(c)
vxm = length(c) - summin-1
nc = -1*summin:1:vxm
subplot(3,1,1)
stem(na,a)
title('x1');
subplot(3,1,2)
stem(nb,b)
title('x2');
subplot(3,1,3)
stem(nc,c)
title('CONVOLUCIÓN')
end
A continuación introducimos la información de las señales en el Command Window.
clear all;
clc;
na = -4:1:5
a=[0 0 4 2 0 2 4 0 0 0 ];
nb = -4:1:5
b=[0 -9 -6 -3 0 3 6 9 0 0];
[nc,c] = convdisc2(a,na,b,nb);
Con lo que tendremos la siguiente salida.
con1.bmp
La cual coincide con la obtenida anteriormente.